PROCEDURE TForm4.TestShlWAPIPathBuildRoot(Sender : TObject);
VAR rootpathbuf : ARRAY[0 .. 24] OF CHAR;
VAR wcharpathbuf : ARRAY[0 .. 24] OF WideChar;
VAR invalidbuf : ARRAY[0 .. 1] OF CHAR;
VAR logdrvnum : INTEGER;
VAR apiretstrp : LPSTR;
VAR wcharstrp : LPWSTR; // = PWideChar
VAR newinfoline : STRING;
BEGIN
FillChar(rootpathbuf, Length(rootpathbuf), #0);
FillChar(wcharpathbuf, Length(wcharpathbuf), #0);
logdrvnum := 0;
apiretstrp := NIL;
wcharstrp := NIL;
newinfoline := '';
newinfoline := 'PathBuildRoot called with ' + IntToStr(logdrvnum);
newinfoline := newinfoline + ' and a buffer size of ' + IntToStr(SizeOf(rootpathbuf));
Memo1.Lines.Add(newinfoline);
apiretstrp := PathBuildRoot(rootpathbuf, logdrvnum);
IF (apiretstrp <> NIL) THEN
newinfoline := 'Returned: ' + PChar(apiretstrp)
ELSE
newinfoline := 'FAILED';
Memo1.Lines.Add(newinfoline);
Inc(logdrvnum);
apiretstrp := NIL;
newinfoline := 'PathBuildRoot called with ' + IntToStr(logdrvnum);
newinfoline := newinfoline + ' and a buffer size of ' + IntToStr(SizeOf(rootpathbuf));
Memo1.Lines.Add(newinfoline);
apiretstrp := PathBuildRoot(rootpathbuf, logdrvnum);
IF (apiretstrp <> NIL) THEN
newinfoline := 'Returned: ' + PChar(apiretstrp)
ELSE
newinfoline := 'FAILED';
Memo1.Lines.Add(newinfoline);
Inc(logdrvnum);
apiretstrp := NIL;
newinfoline := 'PathBuildRoot called with ' + IntToStr(logdrvnum);
newinfoline := newinfoline + ' and a buffer size of ' + IntToStr(SizeOf(rootpathbuf));
Memo1.Lines.Add(newinfoline);
apiretstrp := PathBuildRoot(rootpathbuf, logdrvnum);
IF (apiretstrp <> NIL) THEN
newinfoline := 'Returned: ' + PChar(apiretstrp)
ELSE
newinfoline := 'FAILED';
Memo1.Lines.Add(newinfoline);
//Test function with a initialized path string
Inc(logdrvnum);
apiretstrp := NIL;
FillChar(rootpathbuf, Length(rootpathbuf), #0);
rootpathbuf := '\\Server1\share\';
newinfoline := 'PathBuildRoot called with ' + IntToStr(logdrvnum) +
', a buffer initialized with ' + rootpathbuf;
newinfoline := newinfoline + ', and a buffer size of ' + IntToStr(SizeOf(rootpathbuf));
Memo1.Lines.Add(newinfoline);
apiretstrp := PathBuildRoot(rootpathbuf, logdrvnum);
IF (apiretstrp <> NIL) THEN
newinfoline := 'Returned: ' + PChar(apiretstrp) + ' and in the buffer: ' + rootpathbuf
ELSE
newinfoline := 'FAILED';
Memo1.Lines.Add(newinfoline);
wcharstrp := NIL;
logdrvnum := 24;
newinfoline := 'PathBuildRootW called with ' + IntToStr(logdrvnum);
newinfoline := newinfoline + ' and a buffer size of ' + IntToStr(SizeOf(wcharpathbuf));
Memo1.Lines.Add(newinfoline);
wcharstrp := PathBuildRootW(wcharpathbuf, logdrvnum);
IF (wcharstrp <> NIL) THEN
newinfoline := 'Returned: ' + PWideChar(wcharstrp)
ELSE
newinfoline := 'FAILED';
Memo1.Lines.Add(newinfoline);
wcharstrp := NIL;
Inc(logdrvnum);
newinfoline := 'PathBuildRootW called with ' + IntToStr(logdrvnum);
newinfoline := newinfoline + ' and a buffer size of ' + IntToStr(SizeOf(wcharpathbuf));
Memo1.Lines.Add(newinfoline);
wcharstrp := PathBuildRootW(wcharpathbuf, logdrvnum);
IF (wcharstrp <> NIL) THEN
newinfoline := 'Returned: ' + PWideChar(wcharstrp)
ELSE
newinfoline := 'FAILED';
Memo1.Lines.Add(newinfoline);
//Try forcing an error
wcharstrp := NIL;
Inc(logdrvnum);
newinfoline := 'PathBuildRootW called with ' + IntToStr(logdrvnum);
newinfoline := newinfoline + ' and a buffer size of ' + IntToStr(SizeOf(wcharpathbuf));
Memo1.Lines.Add(newinfoline);
wcharstrp := PathBuildRootW(wcharpathbuf, logdrvnum);
IF (wcharstrp <> NIL) THEN
newinfoline := 'Returned: ' + PWideChar(wcharstrp)
ELSE
newinfoline := 'FAILED';
Memo1.Lines.Add(newinfoline);
apiretstrp := NIL;
logdrvnum := 1000;
newinfoline := 'PathBuildRoot called with ' + IntToStr(logdrvnum);
newinfoline := newinfoline + ' and a buffer size of ' + IntToStr(SizeOf(invalidbuf)) +
' // NOTE the too small buffer !!!';
Memo1.Lines.Add(newinfoline);
apiretstrp := PathBuildRoot(invalidbuf, logdrvnum);
IF (apiretstrp <> NIL) THEN
newinfoline := 'Returned: ' + PChar(apiretstrp)
ELSE
newinfoline := 'FAILED';
Memo1.Lines.Add(newinfoline);
apiretstrp := NIL;
logdrvnum := 1000;
newinfoline := 'PathBuildRoot called with ' + IntToStr(logdrvnum);
newinfoline := newinfoline + ' and a NIL pointer as the address of the buffer';
Memo1.Lines.Add(newinfoline);
apiretstrp := PathBuildRoot(NIL, logdrvnum);
IF (apiretstrp <> NIL) THEN
newinfoline := 'Returned: ' + PChar(apiretstrp)
ELSE
newinfoline := 'FAILED';
Memo1.Lines.Add(newinfoline);
Memo1.Lines.Add('');
Memo1.Lines.Add('');
END; |